import axios from 'axios'
import { Message } from 'element-ui' // 假设使用element-ui的提示组件，可替换为自己的提示方式

// 创建axios实例
const service = axios.create({
    baseURL: process.env.VUE_APP_BASE_API, // 基础路径（从环境变量获取）
    timeout: 10000, // 请求超时时间
    headers: {
        'Content-Type': 'application/json;charset=utf-8'
    }
})

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 添加token（如需要身份验证）
        // if (store.getters.token) {
        //     config.headers.Authorization = `Bearer ${store.getters.token}`
        // }
        return config
    },
    error => {
        // 请求错误处理
        console.error('请求拦截器错误:', error)
        return Promise.reject(error)
    }
)

// 响应拦截器
service.interceptors.response.use(
    response => {
        const res = response.data
        if (response.status !== 200) {
            Message.error('网络请求异常，请稍后重试')
            return Promise.reject(new Error(res.message || 'Error'))
        }
        // 返回数据
        return res
    },
    error => {
        // 响应错误处理（网络错误、超时等）
        console.error('响应拦截器错误:', error)

        if (error.message.includes('timeout')) {
            Message.error('请求超时，请稍后重试')
        } else if (error.response) {
            // 服务器返回错误状态码
            const status = error.response.status
            switch (status) {
                case 404:
                    Message.error('请求地址不存在')
                    break
                case 500:
                    Message.error('服务器内部错误')
                    break
                default:
                    Message.error(`请求失败（${status}）`)
            }
        } else {
            Message.error('网络连接异常，请检查网络')
        }
        return Promise.reject(error)
    }
)

// 封装常用请求方法
export default {
    // get请求
    get(url, params = {}) {
        return service({
            url,
            method: 'get',
            params
        })
    },

    // post请求（JSON格式）
    post(url, data = {}) {
        return service({
            url,
            method: 'post',
            data
        })
    },

    // put请求
    put(url, data = {}) {
        return service({
            url,
            method: 'put',
            data
        })
    },

    // delete请求
    delete(url, params = {}) {
        return service({
            url,
            method: 'delete',
            params
        })
    }
}
